In Elixir, i processi sono di durata breve per impostazione predefinita; una volta terminata una funzione, il processo si interrompe. Per creare un processo persistente con stato, utilizziamo la ricorsione per mantenere vivo il processo in un ciclo.
1. Ottimizzazione delle Chiamate di Coda (TCO)
Se l'azione finale assoluta di una funzione è quella di chiamarsi da sola, la VM Erlang (BEAM) esegue Ottimizzazione delle Chiamate di Coda. Invece di aggiungere un nuovo frame allo stack, semplicemente salta indietro all'inizio della funzione con nuovi argomenti.
def fattoriale(n), do: n * fattoriale(n-1) # NON TCO
2. Stato Persistente
Lo stato viene mantenuto passando valori aggiornati come argomenti alla chiamata ricorsiva. Grazie alla TCO, questi argomenti sostituiscono i parametri originali nello stack senza consumare memoria aggiuntiva, permettendo ai cicli di continuare indefinitamente.